/**
 */
package de.upb.lina.lll.expressions.provider;

import de.upb.lina.lll.expressions.util.ExpressionsAdapterFactory;

import java.util.ArrayList;
import java.util.Collection;

import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.Notifier;

import org.eclipse.emf.edit.provider.ChangeNotifier;
import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.IChangeNotifier;
import org.eclipse.emf.edit.provider.IDisposable;
import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
import org.eclipse.emf.edit.provider.IItemPropertySource;
import org.eclipse.emf.edit.provider.INotifyChangedListener;
import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

/**
 * This is the factory that is used to provide the interfaces needed to support Viewers.
 * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
 * The adapters also support Eclipse property sheets.
 * Note that most of the adapters are shared among multiple instances.
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public class ExpressionsItemProviderAdapterFactory extends ExpressionsAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
	/**
	 * This keeps track of the root adapter factory that delegates to this adapter factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ComposedAdapterFactory parentAdapterFactory;

	/**
	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected IChangeNotifier changeNotifier = new ChangeNotifier();

	/**
	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected Collection<Object> supportedTypes = new ArrayList<Object>();

	/**
	 * This constructs an instance.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ExpressionsItemProviderAdapterFactory() {
		supportedTypes.add(IEditingDomainItemProvider.class);
		supportedTypes.add(IStructuredItemContentProvider.class);
		supportedTypes.add(ITreeItemContentProvider.class);
		supportedTypes.add(IItemLabelProvider.class);
		supportedTypes.add(IItemPropertySource.class);
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Expression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ExpressionItemProvider expressionItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Expression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createExpressionAdapter() {
		if (expressionItemProvider == null) {
			expressionItemProvider = new ExpressionItemProvider(this);
		}

		return expressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.LExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected LExpressionItemProvider lExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.LExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createLExpressionAdapter() {
		if (lExpressionItemProvider == null) {
			lExpressionItemProvider = new LExpressionItemProvider(this);
		}

		return lExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.CExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected CExpressionItemProvider cExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.CExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createCExpressionAdapter() {
		if (cExpressionItemProvider == null) {
			cExpressionItemProvider = new CExpressionItemProvider(this);
		}

		return cExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.SomeValue} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected SomeValueItemProvider someValueItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.SomeValue}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createSomeValueAdapter() {
		if (someValueItemProvider == null) {
			someValueItemProvider = new SomeValueItemProvider(this);
		}

		return someValueItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.AExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected AExpressionItemProvider aExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.AExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createAExpressionAdapter() {
		if (aExpressionItemProvider == null) {
			aExpressionItemProvider = new AExpressionItemProvider(this);
		}

		return aExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.NumberValue} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected NumberValueItemProvider numberValueItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.NumberValue}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createNumberValueAdapter() {
		if (numberValueItemProvider == null) {
			numberValueItemProvider = new NumberValueItemProvider(this);
		}

		return numberValueItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.BooleanValue} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected BooleanValueItemProvider booleanValueItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.BooleanValue}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createBooleanValueAdapter() {
		if (booleanValueItemProvider == null) {
			booleanValueItemProvider = new BooleanValueItemProvider(this);
		}

		return booleanValueItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.StringValue} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected StringValueItemProvider stringValueItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.StringValue}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createStringValueAdapter() {
		if (stringValueItemProvider == null) {
			stringValueItemProvider = new StringValueItemProvider(this);
		}

		return stringValueItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Variable} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected VariableItemProvider variableItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Variable}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createVariableAdapter() {
		if (variableItemProvider == null) {
			variableItemProvider = new VariableItemProvider(this);
		}

		return variableItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Equivalent} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected EquivalentItemProvider equivalentItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Equivalent}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createEquivalentAdapter() {
		if (equivalentItemProvider == null) {
			equivalentItemProvider = new EquivalentItemProvider(this);
		}

		return equivalentItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Imply} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ImplyItemProvider implyItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Imply}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createImplyAdapter() {
		if (implyItemProvider == null) {
			implyItemProvider = new ImplyItemProvider(this);
		}

		return implyItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Or} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected OrItemProvider orItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Or}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createOrAdapter() {
		if (orItemProvider == null) {
			orItemProvider = new OrItemProvider(this);
		}

		return orItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Xor} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected XorItemProvider xorItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Xor}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createXorAdapter() {
		if (xorItemProvider == null) {
			xorItemProvider = new XorItemProvider(this);
		}

		return xorItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.And} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected AndItemProvider andItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.And}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createAndAdapter() {
		if (andItemProvider == null) {
			andItemProvider = new AndItemProvider(this);
		}

		return andItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Not} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected NotItemProvider notItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Not}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createNotAdapter() {
		if (notItemProvider == null) {
			notItemProvider = new NotItemProvider(this);
		}

		return notItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.LessOrEqual} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected LessOrEqualItemProvider lessOrEqualItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.LessOrEqual}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createLessOrEqualAdapter() {
		if (lessOrEqualItemProvider == null) {
			lessOrEqualItemProvider = new LessOrEqualItemProvider(this);
		}

		return lessOrEqualItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Less} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected LessItemProvider lessItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Less}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createLessAdapter() {
		if (lessItemProvider == null) {
			lessItemProvider = new LessItemProvider(this);
		}

		return lessItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.GreaterOrEqual} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected GreaterOrEqualItemProvider greaterOrEqualItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.GreaterOrEqual}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createGreaterOrEqualAdapter() {
		if (greaterOrEqualItemProvider == null) {
			greaterOrEqualItemProvider = new GreaterOrEqualItemProvider(this);
		}

		return greaterOrEqualItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Greater} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected GreaterItemProvider greaterItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Greater}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createGreaterAdapter() {
		if (greaterItemProvider == null) {
			greaterItemProvider = new GreaterItemProvider(this);
		}

		return greaterItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Equal} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected EqualItemProvider equalItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Equal}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createEqualAdapter() {
		if (equalItemProvider == null) {
			equalItemProvider = new EqualItemProvider(this);
		}

		return equalItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Unequal} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected UnequalItemProvider unequalItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Unequal}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createUnequalAdapter() {
		if (unequalItemProvider == null) {
			unequalItemProvider = new UnequalItemProvider(this);
		}

		return unequalItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Approx} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ApproxItemProvider approxItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Approx}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createApproxAdapter() {
		if (approxItemProvider == null) {
			approxItemProvider = new ApproxItemProvider(this);
		}

		return approxItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Plus} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected PlusItemProvider plusItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Plus}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createPlusAdapter() {
		if (plusItemProvider == null) {
			plusItemProvider = new PlusItemProvider(this);
		}

		return plusItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Minus} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected MinusItemProvider minusItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Minus}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createMinusAdapter() {
		if (minusItemProvider == null) {
			minusItemProvider = new MinusItemProvider(this);
		}

		return minusItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Multi} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected MultiItemProvider multiItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Multi}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createMultiAdapter() {
		if (multiItemProvider == null) {
			multiItemProvider = new MultiItemProvider(this);
		}

		return multiItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Div} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected DivItemProvider divItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Div}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createDivAdapter() {
		if (divItemProvider == null) {
			divItemProvider = new DivItemProvider(this);
		}

		return divItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Mod} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ModItemProvider modItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Mod}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createModAdapter() {
		if (modItemProvider == null) {
			modItemProvider = new ModItemProvider(this);
		}

		return modItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link de.upb.lina.lll.expressions.Pow} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected PowItemProvider powItemProvider;

	/**
	 * This creates an adapter for a {@link de.upb.lina.lll.expressions.Pow}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createPowAdapter() {
		if (powItemProvider == null) {
			powItemProvider = new PowItemProvider(this);
		}

		return powItemProvider;
	}

	/**
	 * This returns the root adapter factory that contains this factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ComposeableAdapterFactory getRootAdapterFactory() {
		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
	}

	/**
	 * This sets the composed adapter factory that contains this factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
		this.parentAdapterFactory = parentAdapterFactory;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public boolean isFactoryForType(Object type) {
		return supportedTypes.contains(type) || super.isFactoryForType(type);
	}

	/**
	 * This implementation substitutes the factory itself as the key for the adapter.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter adapt(Notifier notifier, Object type) {
		return super.adapt(notifier, this);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object adapt(Object object, Object type) {
		if (isFactoryForType(type)) {
			Object adapter = super.adapt(object, type);
			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
				return adapter;
			}
		}

		return null;
	}

	/**
	 * This adds a listener.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void addListener(INotifyChangedListener notifyChangedListener) {
		changeNotifier.addListener(notifyChangedListener);
	}

	/**
	 * This removes a listener.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void removeListener(INotifyChangedListener notifyChangedListener) {
		changeNotifier.removeListener(notifyChangedListener);
	}

	/**
	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void fireNotifyChanged(Notification notification) {
		changeNotifier.fireNotifyChanged(notification);

		if (parentAdapterFactory != null) {
			parentAdapterFactory.fireNotifyChanged(notification);
		}
	}

	/**
	 * This disposes all of the item providers created by this factory. 
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void dispose() {
		if (expressionItemProvider != null) expressionItemProvider.dispose();
		if (lExpressionItemProvider != null) lExpressionItemProvider.dispose();
		if (cExpressionItemProvider != null) cExpressionItemProvider.dispose();
		if (someValueItemProvider != null) someValueItemProvider.dispose();
		if (aExpressionItemProvider != null) aExpressionItemProvider.dispose();
		if (numberValueItemProvider != null) numberValueItemProvider.dispose();
		if (booleanValueItemProvider != null) booleanValueItemProvider.dispose();
		if (stringValueItemProvider != null) stringValueItemProvider.dispose();
		if (variableItemProvider != null) variableItemProvider.dispose();
		if (equivalentItemProvider != null) equivalentItemProvider.dispose();
		if (implyItemProvider != null) implyItemProvider.dispose();
		if (orItemProvider != null) orItemProvider.dispose();
		if (xorItemProvider != null) xorItemProvider.dispose();
		if (andItemProvider != null) andItemProvider.dispose();
		if (notItemProvider != null) notItemProvider.dispose();
		if (lessOrEqualItemProvider != null) lessOrEqualItemProvider.dispose();
		if (lessItemProvider != null) lessItemProvider.dispose();
		if (greaterOrEqualItemProvider != null) greaterOrEqualItemProvider.dispose();
		if (greaterItemProvider != null) greaterItemProvider.dispose();
		if (equalItemProvider != null) equalItemProvider.dispose();
		if (unequalItemProvider != null) unequalItemProvider.dispose();
		if (approxItemProvider != null) approxItemProvider.dispose();
		if (plusItemProvider != null) plusItemProvider.dispose();
		if (minusItemProvider != null) minusItemProvider.dispose();
		if (multiItemProvider != null) multiItemProvider.dispose();
		if (divItemProvider != null) divItemProvider.dispose();
		if (modItemProvider != null) modItemProvider.dispose();
		if (powItemProvider != null) powItemProvider.dispose();
	}

}
